[re:Invent 2019] EC2 Image Builder でコンポーネントを作成してみた #reinvent
こんにちは、コンサル部の望月です。
いよいよ Re:Invent が始まりました!早速でてきたサービスの中で、すでに弊社ブログ内でも盛り上がっている EC2 Image Builder が、大変楽しそうだったので、いろいろ試してみようとおもいます。
Image Builder ではコンポーネントを使って、様々なソフトウェアや設定を定義することができ、最初から提供されているものとは別にユーザーで作成もすることができます。
本記事ではコンポーネントを作成を使って Apache のインストールを試してみました。
サービスの内容については、下記ブログで詳しく書かれているので、読んでみてください。
やってみた
コンポーネントの作成
EC2 Image Builder のサポートページから Components の作成を行います。
- EC2 Image Builder のサポートページからサイドバーを開き、『Components』をクリック
- 『Create component』をクリック
- OSには Linux を指定
- Component name には任意の名前をつける
- ここでは『ApacheInstall』を記入
- Component version には任意のバージョンをつける
- ここでは『1.0.0』を記入
- Definition document に実行させたいコンテンツを記入する
- 以下に実行したコンテンツになります
- build でOSの最新化及び Apache のインストール、有効化
- validate でパッケージがインストールされたかの確認
- test で 80 番ポートへ接続できることの確認
- 以下に実行したコンテンツになります
name: Apache Install description: This is Apache Install testing document. schemaVersion: 1.0 phases: - name: build steps: - name: InstallLinuxUpdate action: UpdateOS - name: InstallApache action: ExecuteBash inputs: commands: - sudo yum install httpd -y - sudo systemctl enable httpd - sudo systemctl start httpd - name: validate steps: - name: CheckApache action: ExecuteBash inputs: commands: - rpm -qi httpd - name: test steps: - name: TestApache action: ExecuteBash inputs: commands: - curl localhost
- 保存し、コンポーネントが作成されていることを確認します
イメージパイプラインの作成
イメージパイプラインの作成時に先程作成したコンポーネントを指定します
- イメージパイプライン内の Build components から 『Browse Build components』をクリック
- Select build components から検索条件を『Created by me』に変更し、表示された先ほど作成したコンポーネントを選択
- イメージパイプラインを作成したら『Run pipeline』を選択し、パイプラインを実行します
AMI の確認
EC2 サービスページから AMI が作成されていることを確認します。
- AMI を確認し、起動する
- 起動したインスタンスへアクセスし、Apache のページが表示されることを確認します
まとめ
EC2 Image Builder を使って Apache のインストールを行うことができました。
実際やっていうことは User Data でもできる内容かとは思いますが、検証やテストといったフェースを入れることで、失敗時に AMI の作成を止めると言ったことができるため、安心して利用できるかと思います。
また、個人的ハマりどころとして、最初試したところ SSM Agent のタイムアウトとなり、イメージパイプラインが実行エラーとなりました。確認したところ、VPC やサブネットを指定せずに実行するとデフォルト VPC が使われるのですが、私のデフォルト VPC からインターネットへの接続ができないようになっており、エラーとなっていたようです。
あまり、意識しないところでのエラーではあるので、もし同じエラーで悩んでいる人はデフォルト VPC の環境確認をしてみるといいかもしれません。